<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // Object.defineProperty() 定义新属性和修改原有的属性
        var obj = {
            id: 1,
            pname: '小米',
            price: 1999
        };
        // 以前添加对象的方法
        // obj.unm = 1000;
        // 以前修改对象属性的方法
        // obj.price = 99;
        // console.log(obj);
        // es6 新增的方法 Object.defineProperty() 定义新属性和修改原有的属性
        // Object.defineProperty(对象名,'属性名'，{属性值})
        Object.defineProperty(obj, 'num', {
            // 如果obj这个对象里面没有num这个属性 就会直接添加并赋值
            value: 1000,
            //  enumerable 如果值为false 则不允许遍历 默认是false
            enumerable: true
        });
        console.log(obj);

        Object.defineProperty(obj, 'price', {
            // 如果obj这个对象里面有price这个属性 就会直接修改值
            value: 9.9
        });
        console.log(obj);

        Object.defineProperty(obj, 'id', {
            // writable 后面是false 就是不允许修改这个属性值 如果是true 就是允许修改这个属性值 默认是不允许修改的
            writable: false,
        });
        obj.id = 2;
        console.log(obj);

        Object.defineProperty(obj, 'address', {
            value: '中国山东找蓝翔技术学校',
            // writable 后面是false 就是不允许修改这个属性值 如果是true 就是允许修改这个属性值 默认是不允许修改的
            writable: false,
            //  enumerable 如果值为false 则不允许遍历 默认是false
            enumerable: false,
            // configurable 如果值为false 则不允许删除这个属性 不允许在修改第三个参数里面的特效 默认是false
            configurable: false
        });
        console.log(obj);
        // Object.keys() 遍历对象 转换成数组形式
        console.log(Object.keys(obj));
        // delete 删除
        delete obj.address;
        console.log(obj);
        delete obj.pname;
        console.log(obj);
    </script>
</body>

</html>